home *** CD-ROM | disk | FTP | other *** search
/ IRIS Performer 2.2 Friends Demo / SGI IRIS Performer 2.2 Friends Demo.iso / friends / openworlds / tix / HList.tcl < prev    next >
Text File  |  1997-11-22  |  16KB  |  793 lines

  1. # HList.tcl --
  2. #
  3. # This file defines the default bindings for Tix Hierarchical Listbox widgets.
  4. #
  5. # Copyright (c) 1995 Ioi K Lam
  6. #
  7. # See the file "license.terms" for information on usage and redistribution
  8. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9. #
  10. #--------------------------------------------------------------------------
  11. # tkPriv elements used in this file:
  12. #
  13. # afterId -        Token returned by "after" for autoscanning.
  14. # fakeRelease -        Cancel the ButtonRelease-1 after the user double click
  15. #--------------------------------------------------------------------------
  16. #
  17. # ToDo: shift-up,down keys
  18. proc tixHListBind {} {
  19.     bind TixHList <ButtonPress-1> {
  20.     tixHList::Button-1 %W %x %y %X %Y
  21.     }
  22.     bind TixHList <Shift-ButtonPress-1> {
  23.     tixHList::Shift-Button-1 %W %x %y %X %Y
  24.     }
  25.     bind TixHList <Control-ButtonRelease-1> {;}
  26.     bind TixHList <ButtonRelease-1> {
  27.     if {[%W cget -selectmode] != "dragdrop"} {
  28.         catch {tkCancelRepeat}
  29.     }
  30.     tixHList::ButtonRelease-1 %W %x %y %X %Y
  31.     }
  32.     bind TixHList <B1-Motion> {
  33.     set tkPriv(x) %x 
  34.     set tkPriv(y) %y
  35.     set tkPriv(X) %X
  36.     set tkPriv(Y) %Y
  37.  
  38.     tixHList::B1-Motion %W %x %y %X %Y
  39.     }
  40.     bind TixHList <Control-B1-Motion> {
  41.     set tkPriv(x) %x 
  42.     set tkPriv(y) %y
  43.     set tkPriv(X) %X
  44.     set tkPriv(Y) %Y
  45.     }
  46.     bind TixHList <Control-ButtonPress-1> {
  47.     tixHList::Ctrl-Button1 %W %x %y %X %Y
  48.     }
  49.     bind TixHList <Control-Double-ButtonPress-1> {
  50.     tixHList::Ctrl-Button1 %W %x %y %X %Y
  51.     }
  52.     bind TixHList <Double-ButtonPress-1> {
  53.     tixHList::Double1 %W  %x %y %X %Y
  54.     }
  55.     bind TixHList  <B1-Leave> {
  56.     set tkPriv(x) %x 
  57.     set tkPriv(y) %y
  58.     set tkPriv(X) %X
  59.     set tkPriv(Y) %Y
  60.  
  61.     tixHList::AutoScan %W
  62.     }
  63.     bind TixHList <B1-Enter> {
  64.     if {[%W cget -selectmode] != "dragdrop"} {
  65.         tkCancelRepeat
  66.     }
  67.     }
  68.     bind TixHList <Up> {
  69.     tixHList:UpDown %W prev
  70.     }
  71.     bind TixHList <Down> {
  72.     tixHList:UpDown %W next
  73.     }
  74.     bind TixHList <Shift-Up> {
  75.     tixHList:Shift-UpDown %W prev
  76.     }
  77.     bind TixHList <Shift-Down> {
  78.     tixHList:Shift-UpDown %W next
  79.     }
  80.     bind TixHList <Left> {
  81.     tixHList:LeftRight %W left
  82.     }
  83.     bind TixHList <Right> {
  84.     tixHList:LeftRight %W right
  85.     }
  86.     bind TixHList <Prior> {
  87.     %W yview scroll -1 pages
  88.     }
  89.     bind TixHList <Next> {
  90.     %W yview scroll 1 pages
  91.     }
  92.     bind TixHList <Return> {
  93.     tixHList:Keyboard-Activate %W 
  94.     }
  95.     bind TixHList <space> {
  96.     tixHList:Keyboard-Browse %W 
  97.     }
  98. }
  99.  
  100. #----------------------------------------------------------------------
  101. #
  102. #
  103. #             Key bindings
  104. #
  105. #
  106. #----------------------------------------------------------------------
  107. proc tixHList:Keyboard-Activate {w} {
  108.     set anchor [$w info anchor]
  109.  
  110.     if {$anchor == ""} {
  111.     return
  112.     }
  113.  
  114.     if {[$w cget -selectmode] == "single"} {
  115.     $w select clear
  116.     $w select set $anchor
  117.     }
  118.  
  119.     set command [$w cget -command]
  120.     if {$command != {}} {
  121.     eval $command [list $anchor]
  122.     }
  123. }
  124.  
  125. proc tixHList:Keyboard-Browse {w} {
  126.     set anchor [$w info anchor]
  127.  
  128.     if {$anchor == ""} {
  129.     return
  130.     }
  131.  
  132.     if {[$w cget -selectmode] == "single"} {
  133.     $w select clear
  134.     $w select set $anchor
  135.     }
  136.  
  137.     set browsecmd [$w cget -browsecmd]
  138.     if {$browsecmd != {}} {
  139.     eval $browsecmd [list $anchor]
  140.     }
  141. }
  142.  
  143. proc tixHList:LeftRight {w spec} {
  144.     catch {
  145.     uplevel #0 unset $w:priv:shiftanchor
  146.     }
  147.  
  148.     set anchor [$w info anchor]
  149.     if {$anchor == ""} {
  150.     set anchor [lindex [$w info children] 0]
  151.     }
  152.  
  153.     set done 0
  154.     set ent $anchor
  155.     while {!$done} {
  156.     set e $ent
  157.     if {$spec == "left"} {
  158.         set ent [$w info parent $e]
  159.  
  160.         if {$ent == {} || [$w entrycget $ent -state] == "disabled"} {
  161.         set ent [$w info prev $e]
  162.         }
  163.     } else {
  164.         set ent [lindex [$w info children $e] 0]
  165.  
  166.         if {$ent == {} || [$w entrycget $ent -state] == "disabled"} {
  167.         set ent [$w info next $e]
  168.         }
  169.     }
  170.  
  171.     if {$ent == {}} {
  172.         break
  173.     }
  174.      if {[$w entrycget $ent -state] != "disabled"} {
  175.         break
  176.     }
  177.    }
  178.  
  179.    if {$ent == {}} {
  180.     if {$spec == "left"} {
  181.         $w xview scroll -1 unit
  182.     } else {
  183.         $w xview scroll 1 unit
  184.     }
  185.     return
  186.     }
  187.  
  188.     $w anchor set $ent
  189.     $w see $ent
  190.  
  191.     if {[$w cget -selectmode] != "single"} {
  192.     $w select clear
  193.     $w selection set $ent
  194.  
  195.     set browsecmd [$w cget -browsecmd]
  196.     if {$browsecmd != {}} {
  197.         eval $browsecmd [list $ent]
  198.     }
  199.     }
  200. }
  201.  
  202. proc tixHList:UpDown {w spec} {
  203.     catch {
  204.     uplevel #0 unset $w:priv:shiftanchor
  205.     }
  206.  
  207.     set done 0
  208.     set anchor [$w info anchor]
  209.  
  210.     if {$anchor == ""} {
  211.     set anchor [lindex [$w info children] 0]
  212.  
  213.     if {$anchor == {}} {
  214.         return
  215.     }
  216.  
  217.     if {[$w entrycget $anchor -state] != "disabled"} {
  218.         # That's a good anchor
  219.         set done 1
  220.     } else {
  221.         # We search for the first non-disabled entry (downward)
  222.         set spec next
  223.     }
  224.     }
  225.  
  226.     set ent $anchor
  227.  
  228.     # Find the prev/next non-disabled entry
  229.     #
  230.     while {!$done} {
  231.     set ent [$w info $spec $ent]
  232.     if {$ent == {}} {
  233.         break
  234.     }
  235.     if {[$w entrycget $ent -state] == "disabled"} {
  236.         continue
  237.     }
  238.     if [$w info hidden $ent] {
  239.         continue
  240.     }
  241.     break
  242.     }
  243.  
  244.     if {$ent == {}} {
  245.     if {$spec == "prev"} {
  246.         $w yview scroll -1 unit
  247.     } else {
  248.         $w yview scroll 1 unit
  249.     }
  250.     return
  251.     } else {
  252.     $w anchor set $ent
  253.     $w see $ent
  254.  
  255.     if {[$w cget -selectmode] != "single"} {
  256.         $w select clear
  257.         $w selection set $ent
  258.  
  259.         set browsecmd [$w cget -browsecmd]
  260.         if {$browsecmd != {}} {
  261.         eval $browsecmd [list $ent]
  262.         }
  263.     }
  264.     }
  265. }
  266.  
  267. proc tixHList:Shift-UpDown {w spec} {
  268.  
  269.     if {[$w cget -selectmode] == "single"} {
  270.     tixHList:UpDown $w $spec
  271.     return
  272.     }
  273.     if {[$w cget -selectmode] == "browse"} {
  274.     tixHList:UpDown $w $spec
  275.     return
  276.     }
  277.     if {[$w info anchor] == {}} {
  278.     tixHList:UpDown $w $spec
  279.     return
  280.     }
  281.  
  282.     set done 0
  283.     set anchor [$w info anchor]
  284.  
  285.     global $w:priv:shiftanchor
  286.     if {![info exists $w:priv:shiftanchor]} {
  287.     set $w:priv:shiftanchor $anchor
  288.     }
  289.  
  290.     set ent [set $w:priv:shiftanchor]
  291.     set done 0
  292.  
  293.     # Find the prev/next non-disabled entry
  294.     #
  295.     while {!$done} {
  296.     set ent [$w info $spec $ent]
  297.     if {$ent == {}} {
  298.         break
  299.     }
  300.     if {[$w entrycget $ent -state] == "disabled"} {
  301.         continue
  302.     }
  303.     if [$w info hidden $ent] {
  304.         continue
  305.     }
  306.     break
  307.  
  308.     }
  309.  
  310.     if {$ent == {}} {
  311.     if {$spec == "prev"} {
  312.         $w yview scroll -1 unit
  313.     } else {
  314.         $w yview scroll 1 unit
  315.     }
  316.     return
  317.     } else {
  318.     $w select clear
  319.     $w selection set $anchor $ent
  320.     $w see $ent
  321.     set $w:priv:shiftanchor $ent
  322.  
  323.     set browsecmd [$w cget -browsecmd]
  324.     if {$browsecmd != {}} {
  325.         eval $browsecmd [list $ent]
  326.     }
  327.     }
  328. }
  329.  
  330. #----------------------------------------------------------------------
  331. #
  332. #
  333. #             Mouse bindings
  334. #
  335. #
  336. #----------------------------------------------------------------------
  337.  
  338. proc tixHList::GetNearest {w y} {
  339.     set ent [$w nearest $y]
  340.  
  341.     if {$ent != {}} {
  342.     if {[$w entrycget $ent -state] != "disabled"} {
  343.         return $ent
  344.  
  345.     }
  346.     }
  347.     return {}
  348. }
  349.  
  350. proc tixHList::Button-1 {w x y X Y} {
  351.     catch {
  352.     uplevel #0 unset $w:priv:shiftanchor
  353.     }
  354.  
  355.     if [$w cget -takefocus] {
  356.     focus $w
  357.     }
  358.  
  359.     if {[$w cget -selectmode] == "dragdrop"} {
  360.     tixHList:Send:WaitDrag $w $x $y $X $Y
  361.     return
  362.     }
  363.  
  364.     set ent [tixHList::GetNearest $w $y]
  365.     if {$ent == {}} {
  366.     return
  367.     }
  368.  
  369.     set browse 0
  370.     if {$ent != ""} {
  371.     case [$w cget -selectmode] {
  372.         {single} {
  373.         $w anchor set $ent
  374.         }
  375.         {browse} {
  376.         $w anchor set $ent
  377.         $w select clear
  378.         $w select set $ent
  379.         set browse 1
  380.         }
  381.         {multiple} {
  382.         $w select clear
  383.         $w anchor set $ent
  384.         $w select set $ent
  385.         set browse 1
  386.         }
  387.         {extended} {
  388.         $w anchor set $ent
  389.         $w select clear
  390.         $w select set $ent
  391.         set browse 1
  392.         }
  393.     }
  394.  
  395.     if {$browse} {
  396.         set browsecmd [$w cget -browsecmd]
  397.         if {$browsecmd != {}} {
  398.         eval $browsecmd [list $ent]
  399.         }
  400.     }
  401.     }
  402. }
  403.  
  404. proc tixHList::Shift-Button-1 {w x y X Y} {
  405.     catch {
  406.     uplevel #0 unset $w:priv:shiftanchor
  407.     }
  408.  
  409.     set to [tixHList::GetNearest $w $y]
  410.     if {$to == {}} {
  411.     return
  412.     }
  413.  
  414.     case [$w cget -selectmode] {
  415.     {multiple extended} {
  416.         set from [$w info anchor]
  417.         if {$from == {}} {
  418.         $w anchor set $to
  419.         $w select clear
  420.         $w select set $to
  421.         } else {
  422.         $w select clear
  423.         $w select set $from $to
  424.         }
  425.     }
  426.     }
  427. }
  428.  
  429. proc tixHList::ButtonRelease-1 {w x y X Y} {
  430.     catch {
  431.     uplevel #0 unset $w:priv:shiftanchor
  432.     }
  433.  
  434.     global tkPriv
  435.  
  436.     if {[info exists tkPriv(fakeRelease)]} {
  437.     if {$tkPriv(fakeRelease) == $w} {
  438.         catch {unset tkPriv(fakeRelease)}
  439.         return
  440.     } else {
  441.         catch {unset tkPriv(fakeRelease)}
  442.     }
  443.     }
  444.  
  445.     if {[$w cget -selectmode] == "dragdrop"} {
  446.     tixHList:Send:DoneDrag $w $x $y $X $Y
  447.     return
  448.     }
  449.  
  450.     set ent [tixHList::GetNearest $w $y]
  451.     if {$ent == {}} {
  452.     return
  453.     }
  454.  
  455.     if {$x < 0 || $y < 0 || $x > [winfo width $w] || $y > [winfo height $w]} {
  456.     $w select clear
  457.  
  458.     case [$w cget -selectmode] {
  459.         {single browse} {
  460.         return
  461.         }
  462.     }
  463.     } else {
  464.     case [$w cget -selectmode] {
  465.         {single browse} {
  466.         $w anchor set $ent
  467.         $w select clear
  468.         $w select set $ent
  469.         }
  470.         {multiple} {
  471.         $w select set $ent
  472.         }
  473.         {extended} {
  474.         $w select set $ent
  475.         }
  476.     }
  477.     }
  478.  
  479.     set browsecmd [$w cget -browsecmd]
  480.     if {$browsecmd != {}} {
  481.     eval $browsecmd [list $ent]
  482.     }
  483. }
  484.  
  485. proc tixHList::Double1 {w x y X Y} {
  486.     catch {
  487.     uplevel #0 unset $w:priv:shiftanchor
  488.     }
  489.     global tkPriv
  490.     set ent [tixHList::GetNearest $w $y]
  491.  
  492.     if {$ent != ""} {
  493.     if {[$w info anchor] == {}} {
  494.         $w anchor set $ent
  495.     }
  496.     $w select set $ent
  497.     set command [$w cget -command]
  498.     if {$command != {}} {
  499.         eval $command [list $ent]
  500.     }
  501.     }
  502.  
  503.     set tkPriv(fakeRelease) $w
  504. }
  505.  
  506. proc tixHList::Ctrl-Button1 {w x y X Y} {
  507.     catch {
  508.     uplevel #0 unset $w:priv:shiftanchor
  509.     }
  510.  
  511.     set ent [tixHList::GetNearest $w $y]
  512.  
  513.     if {$ent != ""} {
  514.     case [$w cget -selectmode] {
  515.         {extended} {
  516.         if {[$w info anchor] == {}} {
  517.             $w anchor set $ent
  518.         }
  519.  
  520.         if [$w select includes $ent] {
  521.             $w select clear $ent
  522.         } else {
  523.             $w select set $ent
  524.         }
  525.         
  526.         set browsecmd [$w cget -browsecmd]
  527.         if {$browsecmd != {}} {
  528.             eval $browsecmd [list $ent]
  529.         }
  530.         }
  531.     }
  532.     }
  533. }
  534.  
  535. # ToDo: The multiple selection is not very efficient when there
  536. #    are a large number of entries. Should only select/de-select
  537. #    those entries who are affected.
  538. #
  539. proc tixHList::B1-Motion {w x y X Y} {
  540.     global tkPriv
  541.  
  542.     catch {
  543.     uplevel #0 unset $w:priv:shiftanchor
  544.     }
  545.     if {[$w cget -selectmode] == "dragdrop"} {
  546.     tixHList:Send:StartDrag $w $x $y $X $Y
  547.     return
  548.     }
  549.  
  550.     set ent [tixHList::GetNearest $w $y]
  551.  
  552.     if {$ent != ""} {
  553.     case [$w cget -selectmode] {
  554.         {single} {
  555.         $w anchor set $ent
  556.         }
  557.         {browse} {
  558.         $w select clear
  559.         $w select set $ent
  560.         $w anchor set $ent
  561.         }
  562.         {multiple extended} {
  563.         if {[$w info anchor] == {}} {
  564.             $w anchor set $ent
  565.             $w select clear
  566.             $w select set $ent
  567.         } else {
  568.             set from [$w info anchor]
  569.             set to $ent
  570.             $w select clear
  571.  
  572.             $w select set $from $to
  573.         }
  574.         }
  575.     }
  576.     if {[$w cget -selectmode] != "single"} {
  577.         set browsecmd [$w cget -browsecmd]
  578.         if {$browsecmd != {}} {
  579.         eval $browsecmd [list $ent]
  580.         }
  581.     }
  582.     }
  583. }
  584.  
  585. # tixHList::AutoScan --
  586. # This procedure is invoked when the mouse leaves an entry window
  587. # with button 1 down.  It scrolls the window up, down, left, or
  588. # right, depending on where the mouse left the window, and reschedules
  589. # itself as an "after" command so that the window continues to scroll until
  590. # the mouse moves back into the window or the mouse button is released.
  591. #
  592. # Arguments:
  593. # w -        The entry window.
  594.  
  595. proc tixHList::AutoScan {w} {
  596.     global tkPriv
  597.     set x $tkPriv(x)
  598.     set y $tkPriv(y)
  599.     set X $tkPriv(X)
  600.     set Y $tkPriv(Y)
  601.  
  602.     if {[$w cget -selectmode] == "dragdrop"} {
  603.     return
  604.     }
  605.  
  606.     if {$y >= [winfo height $w]} {
  607.     $w yview scroll 1 units
  608.     } elseif {$y < 0} {
  609.     $w yview scroll -1 units
  610.     } elseif {$x >= [winfo width $w]} {
  611.     $w xview scroll 2 units
  612.     } elseif {$x < 0} {
  613.     $w xview scroll -2 units
  614.     } else {
  615.     return
  616.     }
  617.  
  618.     set tkPriv(afterId) [after 50 tixHList::AutoScan $w]
  619.     tixHList::B1-Motion $w $x $y $X $Y
  620. }
  621.  
  622. #----------------------------------------------------------------------
  623. #
  624. #            Drag + Drop Bindings
  625. #
  626. #----------------------------------------------------------------------
  627.  
  628.          #----------------------------------------#
  629.          #              Sending Actions          #
  630.          #----------------------------------------#
  631.  
  632. #----------------------------------------------------------------------
  633. #  tixHList:Send:WaitDrag --
  634. #
  635. #    Sender wait for dragging action
  636. #----------------------------------------------------------------------
  637. proc tixHList:Send:WaitDrag {w x y X Y} {
  638.     global tixPriv
  639.  
  640.     set ent [tixHList::GetNearest $w $y]
  641.     if {$ent != {}} {
  642.     $w anchor set $ent
  643.     $w select clear
  644.     $w select set $ent
  645.  
  646.     set tixPriv(dd,$w:moved) 0
  647.     set tixPriv(dd,$w:entry) $ent
  648.  
  649.     set browsecmd [$w cget -browsecmd]
  650.     if {$browsecmd != {} && $ent != {}} {
  651.         eval $browsecmd [list $ent]
  652.     }
  653.     }
  654. }
  655.  
  656. proc tixHList:Send:StartDrag {w x y X Y} {
  657.     global tixPriv
  658.     set dd [tixGetDragDropContext $w]
  659.  
  660.     if {![info exists tixPriv(dd,$w:entry)]} {
  661.     return
  662.     }
  663.     if {$tixPriv(dd,$w:entry) == {}} {
  664.     return
  665.     }
  666.  
  667.     if {$tixPriv(dd,$w:moved) == 0} {
  668.     $w dragsite set $tixPriv(dd,$w:entry)
  669.     set tixPriv(dd,$w:moved) 1
  670.     $dd config -source $w -command "tixHList:Send:Cmd $w"
  671.     $dd startdrag $X $Y
  672.     } else {
  673.     $dd drag $X $Y
  674.     }
  675. }
  676.  
  677. proc tixHList:Send:DoneDrag {w x y X Y} {
  678.     global tixPriv
  679.     global moved
  680.  
  681.     if {![info exists tixPriv(dd,$w:entry)]} {
  682.     return
  683.     }
  684.     if {$tixPriv(dd,$w:entry) == {}} {
  685.     return
  686.     }
  687.  
  688.     if {$tixPriv(dd,$w:moved) == 1} {
  689.     set dd [tixGetDragDropContext $w]
  690.     $dd drop $X $Y
  691.     }
  692.     $w dragsite clear
  693.     catch {unset tixPriv(dd,$w:moved)}
  694.     catch {unset tixPriv(dd,$w:entry)}
  695. }
  696.  
  697. proc tixHList:Send:Cmd {w option args} {
  698.     set dragCmd [$w cget -dragcmd]
  699.     if {$dragCmd != {}} {
  700.     return [eval $dragCmd $option $args]
  701.     }
  702.  
  703.     # Perform the default action
  704.     #
  705.     case "$option" {
  706.     who {
  707.         return $w
  708.     }
  709.     types {
  710.         return {data text}
  711.     }
  712.     get {
  713.         global tixPriv
  714.         if {[lindex $args 0] == "text"} {
  715.         if {$tixPriv(dd,$w:entry) != {}} {
  716.             return [$w entrycget $tixPriv(dd,$w:entry) -text]
  717.         }
  718.         }
  719.         if {[lindex $args 0] == "data"} {
  720.         if {$tixPriv(dd,$w:entry) != {}} {
  721.             return [$w entrycget $tixPriv(dd,$w:entry) -data]
  722.         }
  723.         }
  724.     }
  725.     }
  726. }
  727.  
  728.          #----------------------------------------#
  729.          #              Receiving Actions          #
  730.          #----------------------------------------#
  731. proc tixHList:Rec:DragOver {w sender x y} {
  732.     if {[$w cget -selectmode] != "dragdrop"} {
  733.     return
  734.     }
  735.  
  736.     set ent [tixHList::GetNearest $w $y]
  737.     if {$ent != {}} {
  738.     $w dropsite set $ent
  739.     } else {
  740.     $w dropsite clear
  741.     }
  742. }
  743.  
  744. proc tixHList:Rec:DragIn {w sender x y} {
  745.     if {[$w cget -selectmode] != "dragdrop"} {
  746.     return
  747.     }
  748.     set ent [tixHList::GetNearest $w $y]
  749.     if {$ent != {}} {
  750.     $w dropsite set $ent
  751.     } else {
  752.     $w dropsite clear
  753.     }
  754. }
  755.  
  756. proc tixHList:Rec:DragOut {w sender x y} {
  757.     if {[$w cget -selectmode] != "dragdrop"} {
  758.     return
  759.     }
  760.     $w dropsite clear
  761. }
  762.  
  763. proc tixHList:Rec:Drop {w sender x y} {
  764.     if {[$w cget -selectmode] != "dragdrop"} {
  765.     return
  766.     }
  767.     $w dropsite clear
  768.  
  769.     set ent [tixHList::GetNearest $w $y]
  770.     if {$ent != {}} {
  771.     $w anchor set $ent
  772.     $w select clear
  773.     $w select set $ent
  774.     }
  775.  
  776.     set dropCmd [$w cget -dropcmd]
  777.     if {$dropCmd != {}} {
  778.     eval $dropCmd $sender $x $y
  779.     return
  780.     }
  781.  
  782.     set browsecmd [$w cget -browsecmd]
  783.     if {$browsecmd != {} && $ent != {}} {
  784.     eval $browsecmd [list $ent]
  785.     }
  786. }
  787.  
  788. tixDropBind TixHList <In>   "tixHList:Rec:DragIn %W %S %x %y"
  789. tixDropBind TixHList <Over> "tixHList:Rec:DragOver %W %S %x %y"
  790. tixDropBind TixHList <Out>  "tixHList:Rec:DragOut %W %S %x %y"
  791. tixDropBind TixHList <Drop> "tixHList:Rec:Drop %W %S %x %y"
  792.